package com.atwisdom.star.core.bsl.modelClass.logic;

import com.alibaba.fastjson.JSONObject;
import com.atwisdom.star.common.vo.ActionData;
import com.atwisdom.star.common.vo.ResultInfo;
import com.atwisdom.star.exception.pojo.BusinessException;

public interface LogicModelBslService {
    /**
     * 查询全部摘要（通用）
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> queryAllInfo(ActionData<JSONObject> actionData);

    /**
     * 分页查询全部摘要（通用）
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> queryAllInfoByPage(ActionData<JSONObject> actionData);

    /**
     * 查询全部数据（通用）
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> queryAll(ActionData<JSONObject> actionData) ;

    /**
     * 分页查询全部数据（通用）
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> listAllByPage(ActionData<JSONObject> actionData);

    /**
     * 按条件查询模型
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> query(ActionData<JSONObject> actionData);

    /**
     * 根据类名查询容器属性
     * @param actionData 类名
     * @return 返回结果
     * @throws BusinessException 异常
     */
    ResultInfo<?> queryHierProperties(ActionData<JSONObject> actionData);

    /**
     * 按条件分页查询模型摘要
     * @param actionData 参数
     * @return 返回结果
     */
    ResultInfo<?> queryInfoByPage(ActionData<JSONObject> actionData);

    /**
     * 按条件分页查询模型
     * @param actionData 参数
     * @return 返回结果
     */
    ResultInfo<?> queryByPage(ActionData<JSONObject> actionData);

    /**
     * 分页查询全部版本摘要（通用）
     * @return 返回结果
     */
    ResultInfo<?> queryAllVersionInfoByPage(ActionData<JSONObject> actionData);

    /**
     * 分页条件查询版本摘要（通用）
     * @return 返回结果
     */
    ResultInfo<?> queryVersionInfoByPage(ActionData<JSONObject> actionData);

    /**
     *按条件和版本查询（通用）
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> queryVersion(ActionData<JSONObject> actionData);

    /**
     *设置版本有效
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> setPublish(ActionData<JSONObject> actionData) ;

    /**
     * 设置版本无效
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> setUnPublish(ActionData<JSONObject> actionData);

    /**
     * 版本升级
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> upgrade(ActionData<JSONObject> actionData);

    /**
     * 添加新模型
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> add(ActionData<JSONObject> actionData);

    /**
     * 拷贝模型
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> clone(ActionData<JSONObject> actionData);

    /**
     * 更新模型类型和类名（配置阶段）
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> updateClassName(ActionData<JSONObject> actionData);

    /**
     * 更新模型属性字段
     * 更新，需要同步更新实例，同步更新历史数据
     * 1、className 和 自定字段
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> updateById(ActionData<JSONObject> actionData);

    /**
     * 更新容器属性
     * @param actionData 更新参数
     * @return 返回更新后模型
     */
    ResultInfo<?> updateHierProperties(ActionData<JSONObject> actionData);


    /**
     * 按ids删除模型
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> deleteByIds(ActionData<JSONObject> actionData);

    /**
     * 接className删除
     * 1、删除实例、2、删除历史 3、更新redis
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> deleteByClassName(ActionData<JSONObject> actionData);

    /**
     * 批量删除
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> deleteByClassNames(ActionData<JSONObject> actionData);

    /**
     * 按Id 废除模型
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> repealByIds(ActionData<JSONObject> actionData);

    /**
     * 批量废除
     *
     * @param actionData 参数
     * @return 返回值
     */
    ResultInfo<?> repealByClassNames(ActionData<JSONObject> actionData);
}
